package com.fm.financemanage.constant.annotation;

import org.springframework.validation.annotation.Validated;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 限流
 *
 * @Author: zpc
 * @Date: 2023/10/07
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Validated
public @interface RateLimit {

    /**
     * key区分各个方法模块
     *
     * @return
     */
    String key();

    /**
     *
     *
     * @return
     */
    int replenishRate() default 1;

    /**
     * 初始令牌数,代表刚开始可以存在多少令牌(也代表最大令牌数量 令牌桶允许存在的最大令牌数)
     *
     * @return
     */
    int capacity() default 0;

    /**
     * 访问一次需要消耗的令牌数
     *
     * @return
     */
    int requestedTokens() default 1;


    /**
     * 提示信息
     *
     * @return
     */
    String message() default "";

}
